package com.deco.back.utils;

import java.util.concurrent.LinkedBlockingQueue;

public class NameMaker {
	  private static NameMaker instance = new NameMaker();

	    private LinkedBlockingQueue<Long> queue = new LinkedBlockingQueue<Long>();

	    private long cMax = 0L;

	    private Hex32 hex = new Hex32();

	    private NameMaker() {
	    }

	    public static NameMaker getInstance() {
	        return instance;
	    }

	    /**
	     * 
	     * 功能描述: <br>
	     * 生成编码
	     * 
	     * @param num 生成的数量
	     * @see [相关类/方法](可选)
	     * @since [产品/模块版本](可选)
	     */
	    public synchronized void make(int num) {
	        long sysc = System.currentTimeMillis();
	        if (cMax > sysc) {
	            sysc = cMax;
	        }
	        try {
	            for (int i = 0; i < num; i++) {
	                queue.put(sysc++);
	            }
	            cMax = sysc;
	        } catch (InterruptedException e) {
	            //LOGGER.error("生成编码出错", e);
	        }
	    }

	    /**
	     * 
	     * 功能描述: <br>
	     * 获取一个编码
	     * 
	     * @return
	     * @see [相关类/方法](可选)
	     * @since [产品/模块版本](可选)
	     */
	    public long get() {
	        Long num = queue.poll();
	        while (num == null) {
	            make(1);
	            num = queue.poll();
	        }
	        return num;
	    }

	    /**
	     * 
	     * 功能描述: <br>
	     * 获取32进制的编码
	     * 
	     * @return
	     * @see [相关类/方法](可选)
	     * @since [产品/模块版本](可选)
	     */
	    public String getStr32() {
	        return hex.numericToString(get(), 32);
	    }
}
